import * as QRCode from "qrcode";
import { createWriteStream } from "fs";

const default_options = {
  errorCorrectionLevel: "H",
  type: "image/png",
  quality: 0.9,
  margin: 1,
  color: {
    dark: "#000", // 二维码的颜色
    light: "#0000", // 二维码背景色
  },
};

export class QrCodeGenerator {
  /**
   * 生成二维码图片并保存到文件
   * @param text 要编码的文本
   * @param filePath 保存二维码图片的文件路径
   * @param options qrcode包的选项
   */
  static async generateToFile(
    text: string,
    filePath: string,
    options?: any,
  ): Promise<void> {
    return new Promise((resolve, reject) => {
      QRCode.toFile(
        filePath,
        text,
        { ...default_options, ...options },
        (err) => {
          if (err) {
            reject(err);
          } else {
            console.log(`二维码图片已保存到: ${filePath}`);
            resolve();
          }
        },
      );
    });
  }

  /**
   * 生成二维码图片的Buffer
   * @param text 要编码的文本
   * @param options qrcode包的选项
   * @returns 返回包含二维码图片的Buffer对象
   */
  static async generateToBuffer(text: string, options?: any): Promise<Buffer> {
    return new Promise((resolve, reject) => {
      QRCode.toBuffer(text, options, (err, buffer) => {
        if (err) {
          reject(err);
        } else {
          resolve(buffer);
        }
      });
    });
  }

  /**
   * 生成二维码图片的Base64字符串
   * @param text 要编码的文本
   * @param options qrcode包的选项
   * @returns 返回二维码图片的Base64字符串
   */
  static async generateToBase64(text: string, options?: any): Promise<string> {
    const buffer = await this.generateToBuffer(text, {
      ...default_options,
      ...options,
    });
    return buffer.toString("base64");
  }
}
